var respAjax = "";
var cmb1 = "";
var cmb2 = "";
var tblCont = 0;

google.load('visualization', '1', {
  'packages': ['geomap', 'corechart']
}); /** inicio js para univision **/
var univision = function()
{
  var me = this;
  //funcion que permite indicar la seleccion 
  //de un elemento del menu
  me.menu_cambio = function(idObj, ruta)
  {
    $("#menu_master li").each(function()
    {
      $(this).removeClass("start active");
    });
    $("#" + idObj).addClass("start active");
    me.cargaPagina(ruta);
  }
  //*************************************/
  //permite cargar dinamicamente
  //paginas mediante ajax
  me.cargaPagina = function(ruta)
  {
    $("input[name='daterangepicker_start']").remove();
    $("input[name='daterangepicker_end']").remove();
    
    $(".span12").load(ruta);
  }
  //*************************************/
  me.upValidaFile = function()
  {
    var idFile = document.getElementById("files_id");
    var msg = "";
    if (idFile.value != "")
    {
      if ((idFile.value).indexOf("csv") != -1)
      {
        return ajaxFileUpload(idFile.id);
      }
      else
      {
        idFile.value = "";
        msg = "Extenci\u00F3n no valida solo se permite la extencion .csv .... ";
      }
    }
    else
    {
      msg = "Seleccione el documento que desea subir .... ";
    }

    if (msg != "")
    {
      alert(msg);
    }
  }
  //*************************************/
  /*permite contar los calores repetidos en un arreglo*/
  me.cuentaRepetidos = function(array)
  {
    var r = arguments[1] || [],
        i = 0;
    for (; i < array.length; i++)
    {
      if (Object.prototype.hasOwnProperty.call(array, i))
      {
        if (array[i] instanceof Array)
        {
          r = countRepeated(array[i], r);
        }
        else
        {
          if (r[array[i]]) r[array[i]]++;
          else
          r[array[i]] = 1;
        }
      }
    }
    return r;
  }
  //*************************************/
  /*permite el llenado de los combos mediante ajax*/
  me.combo = function(tbl)
  {
    $.ajax(
    {
      url: '../administrador/estadisticas/callajax',
      type: 'POST',
      dataType: "json",
      async: false,
      data: {
        "tabla": tbl
      },
      success: function(respuesta)
      {
        window.respAjax = respuesta;
        return respuesta;
      }
    });
  }
  //*************************************/
  /*funcion para armar el autocomplete*/
  me.autoComplete = function(idObj, json)
  {

    $("#" + idObj).autocomplete(
    {
      lookup: json,
      onSelect: function(suggestion)
      {
        $("#c" + idObj + " option[value=" + suggestion.idcountry + "]").attr("selected", true);
        $("#h" + idObj).val(suggestion.state_abbreviation);
      }
    });
  }
  //*************************************/
  //armo el combo de pais
  me.comboPais = function()
  {
    var json = window.cmb2;
    var longitud = (json).length;
    var html = "";
    for (var a = 0; a < longitud; a++)
    {
      html += "<option value = '" + json[a]["id_country"] + "'>";
      html += json[a]["value"];
      html += "</option>";
    }
    return html;
  }
  //*************************************/
  //cargo un nuevo elemento en el diccionario asi como cambiarlo en la tabla presente
  me.diccionario = function(idObj)
  {
    var palabra = document.getElementById("2h" + idObj);
    var estado = document.getElementById(idObj);
    var abreviacion = document.getElementById("h" + idObj);
    var pais = document.getElementById("c" + idObj);
    var json = window.cmb2;
    var auxp = "";
    var cont = 0;
    var cont2 = 1;
    //valores de la tabla
    var arrTabla = document.querySelectorAll("#tblContenedor tbody tr td");
    //outerText

    //verifico que se capture un estado             
    if (estado.value != "")
    {
      //busco la abreviacion correspondiente al estado
      for (var a = 0; a < json.length; a++)
      {
        if (json[a]["id_country"] == pais.value)
        {
          auxp = json[a]["country_abbreviation"];
          auxp2 = json[a]["value"];
        }
      }
      //pido confirmaccion sobre la accion a realizar        
      if (confirm("Estas seguro que realizar el siguiente cambio de " + palabra.value + " a " + abreviacion.value + " que se encuentra en " + auxp2))
      {
        //recorro la talba que contiene los datos para 
        //realizar los cambios correspondientes
        for (var table in arrTabla)
        {
          aux = arrTabla[table];
          //buso la posicion exacta del texto a cambiar
          if (("'" + aux.id + "'").indexOf("_cvs_10") >= 0)
          {
            txt = (aux.outerText).toLowerCase();
            if (txt == palabra.value)
            {
              $("#" + aux.id).html(abreviacion.value);
              $("#" + cont2 + "_cvs_12").html(auxp);
              $("#t" + idObj).fadeOut("slow");
            }
          }
          cont++;
          if (cont >= 19)
          {
            cont2++;
            cont = 0;
          }
        }
        //fin recorrido tabla
        //mando los nuevos datos a cargar en la base para  
        $.ajax(
        {
          url: '../administrador/estadisticas/callajax',
          type: 'POST',
          dataType: "json",
          async: false,
          data: {
            "tabla": "3",
            "word": palabra.value,
            "abreviatura": abreviacion.value,
            "pais": auxp
          },
          success: function(respuesta)
          {
            window.respAjax = respuesta;
          }
        });

        window.tblCont -= 1;
        if (window.tblCont <= 0)
        {
          $("#tbl_resumen").fadeOut();
          $("#carga_registro").fadeIn();
        }
      }
      //en el caso de que se rechase la accion
      else
      {
      }
    }

    //en el caso de que no exista un estado mandamos la alerta
    else
    {
      alert("Indique el estado ....");
    }
  }
  //*************************************/

  //funcion para generar le arreglo 
  me.arrayCVS = function(email, externalId, firstName, lastName, birthDate, gender, regDate, regTimeStamp, regPartner, state, city, country, newsletter, optinA, optinN, optinS)
  {
    this.email = email;
    this.externalId = externalId;
    this.firstName = firstName;
    this.lastName = lastName;
    this.birthDate = birthDate;
    this.gender = gender;
    this.regDate = regDate;
    this.regTimeStamp = regTimeStamp;
    this.regPartner = regPartner;
    this.state = state;
    this.city = city;
    this.country = country;
    this.optinA = optinA;
    this.optinN = optinN;
    this.optinS = optinS;
    this.newsletter = newsletter;
  }

  //funcion que permite enviar los datos normalizado a la base de datos
  me.cargarRegistros = function()
  {
    if (confirm("Desea grabar los cambios realizados ?"))
    {
      var tbl = document.querySelectorAll("#tblContenedor tbody tr");
      var aux = "";
      var json = "";
      var arrFinal = new Array();

      for (var a = 1; a <= tbl.length; a++)
      {
        //val1 = $("#"+a+"_cvs_0").html();
        val2 = $("#" + a + "_cvs_1").html();
        val3 = $("#" + a + "_cvs_2").html();
        val4 = $("#" + a + "_cvs_3").html();
        val5 = $("#" + a + "_cvs_4").html();
        val6 = $("#" + a + "_cvs_5").html();
        val7 = $("#" + a + "_cvs_6").html();
        val8 = $("#" + a + "_cvs_7").html();
        val9 = $("#" + a + "_cvs_8").html();
        val10 = $("#" + a + "_cvs_9").html();
        val11 = $("#" + a + "_cvs_10").html();
        val12 = $("#" + a + "_cvs_11").html();
        val13 = $("#" + a + "_cvs_12").html();
        val14 = $("#" + a + "_cvs_13").html();
        val15 = $("#" + a + "_cvs_14").html();
        val16 = $("#" + a + "_cvs_15").html();
        val17 = $("#" + a + "_cvs_16").html();
        aux = new me.arrayCVS(val2, val3, val4, val5, val6, val7, val8, val9, val10, val11, val12, val13, val14, val15, val16, val17);
        arrFinal.push(aux);
      }
      json = JSON.stringify(arrFinal);

      $.ajax(
      {
        url: '../administrador/estadisticas/callajax',
        type: 'POST',
        dataType: "text",
        async: false,
        data: {
          "tabla": "4",
          "arreglo": json
        },
        success: function(respuesta)
        {
          var arr = respuesta.split("-");
          if (parseInt(arr[0]) > 0 || parseInt(arr[1]) > 0)
          {
            alert("Se cargaron -" + arr[0] + " Registros \n Se actualizaron -" + arr[1] + " Registros");
            $("#carga_registro").toggle("slow");
            $("#tbl_contenedor").toggle("slow");
            $("#doc_cv").html('');

          }
          else
          {
          }
        }
      });
    }
    else
    {
      alert("no");
    }
  }
  //*************************************/
  /* permite crear la grafica de estadisticas por pais*/
  me.geoMap = function(pais)
  {
    //google.load('visualization', '1', {'packages': ['geomap']});
    var json = (window.jsonGr).split(",");
    var aux = new Array();
    var aux2 = "";
    var geo = "";
    var tbl = "";
    var porcenteje = 0;
    for (var a = 0; a < json.length; a++)
    {
      if ((json[a]).lastIndexOf(pais) >= 0)
      {
        aux.push(json[a]);
      }
    }

    for (var b = 0; b < aux.length; b++)
    {
      aux2 = (aux[b]).split("-");
      geo += "['" + aux2[0] + "'," + aux2[1] + "],";
      porcenteje = Math.round(((100 * aux2[2]) / aux2[1]) * 100) / 100;

      tbl += "<tr>" + "<td>" + (b + 1) + "</td>" + "<td style='text-align:left'>" + aux2[0] + "</td>" + "<td style='text-align:right'>" + aux2[1] + "</td>" + "<td style='text-align:right'>" + aux2[2] + "</td>" + "<td style='text-align:right'>" + porcenteje + "%</td>"; + "</tr>";
    }
    var newGeo = geo.substring(0, geo.length - 1);
    $("#tblUsers").html(tbl);


    var data = eval("google.visualization.arrayToDataTable([['City', 'Usuarios']," + newGeo + "]);");

    var options =
    {
    };
    options['region'] = pais;
    options['colors'] = [0x94e14f, 0x61b713, 0x267114]; //orange colors
    options['displayMode'] = 'markers';
    options['width'] = "530";
    options['height'] = "300";

    var container = document.getElementById('vmap_world');
    var geomap = new google.visualization.GeoMap(container);
    geomap.draw(data, options);
  }

  /* grafica para los options marcados*/
  me.payChar = function(pais)
  {
    var json = (window.jsonGr).split(",");
    var aux = new Array();
    var aux2 = "";
    var geo = "";
    var tbl = "";
    var porcenteje = 0;

    for (var a = 0; a < json.length; a++)
    {
      
      if ((json[a]).lastIndexOf(pais) >= 0 || (json[a]).lastIndexOf("NULL"))
      {
        aux.push(json[a]);
      }
    }

    for (var b = 0; b < aux.length; b++)
    {
      aux2 = (aux[b]).split("-");
      if(aux2[3] == pais)
      {
        porcenteje = Math.round(((100 * aux2[1]) / window.Toptin) * 100) / 100;
        geo += "['" + aux2[0] + "'," + porcenteje + "],";
        tbl += "<tr>" + "<td>" + (b + 1) + "</td>" + "<td style='text-align:left'>" + aux2[0] + "</td>" + "<td style='text-align:left'>" + aux2[1] + "</td>" + "<td style='text-align:left'>" + porcenteje + "%</td>" + "</tr>";
      }
    }
    var newGeo = geo.substring(0, geo.length - 1);
    //console.log(newGeo);



    $("#tblUsers").html(tbl);
    //console.log(window.Tnull);
    var data = eval("google.visualization.arrayToDataTable([['State', 'Percentage']," + newGeo + "]);");
    var options =
    {
      is3D: true,
      height: "320",
      width: "528"
    };
    var container = document.getElementById('vmap_world');
    new google.visualization.PieChart(container).draw(data, options);
  } /****************************************************************************************************************/

  /*funcion para el manejo de graficas seccion newsletter*/
  me.payChar2 = function(pais)
  {
    var json = (window.jsonGr).split(",");
    var aux = new Array();
    var aux2 = "";
    var geo = "";
    var tbl = "";
    var cont = 1;
    var porcenteje = 0;
    for(var b = 0 ; b < json.length ; b++)
    {
      aux2 = (json[b]).split("-");
      porcenteje = Math.round(((100 * aux2[1]) / window.TNews) * 100) / 100;
      geo += "['" + aux2[0] + "'," + porcenteje + "],";
      tbl += "<tr>"
             +"<td>"+cont+"</td>"
             +"<td style='text-align:left'>"+aux2[0]+"</td>"
             +"<td style='text-align:right'>"+aux2[1]+"</td>"
             +"<td style='text-align:right'>"+aux2[2]+"</td>"
             +"<td style='text-align:right'>"+(aux2[1]-aux2[2])+"</td>"
             +"<td style='text-align:right'>"+porcenteje+"%</td>"
             +"</tr>";
      cont++;
    }

   var newGeo = geo.substring(0, geo.length - 1);
   var data = eval("google.visualization.arrayToDataTable([['State', 'Percentage']," + newGeo + "]);");
    var options =
    {
      is3D: true,
      height: "320",
      width: "528"
    };
    var container = document.getElementById('vmap_world');
    new google.visualization.PieChart(container).draw(data, options);
    $("#tblUsers").html(tbl);
    
  }

  /*funciones para realizar el filtrado por fechas para cada pantalla*/

  //function para el manejo del filtrado de las estadisticas del dashboard
  me.dashboard = function(respuesta)
  {
    var _html = "";
    var country = (respuesta.country).split(",");
    window.jsonGr = respuesta.tbl;
    $("#combo_geo").html("");

    for (var a = 0; a < country.length; a++)
    {
      aux = (country[a]).split("-");
      _html += "<li>" + "<a href=\"javascript:tv.geoMap('" + aux[0] + "')\">" + aux[1] + "</a>" + "</li>";
      if (a == 0)
      {
        me.geoMap(aux[0]);
      }

    }
    $("#combo_geo").html(_html);
    var contadores = (respuesta.cont).split("-");

    $("#numUser").html(contadores[0]);
    $("#optUser").html(contadores[1]);
    $("#numMail").html(contadores[2]);
    $("#numNews").html(contadores[3]);
  }

  //function para el manejo del filtrado de las estadisticas del optin
  me.optin = function(respuesta)
  {
    var _html = "";
    var country = (respuesta.country).split(",");
    window.jsonGr = respuesta.tbl;
    $("#combo_geo").html("");
    

    for (var a = 0; a < country.length; a++)
    {
      aux = (country[a]).split("-");
      _html += "<li>" + "<a href=\"javascript:tv.payChar('" + aux[0] + "')\">" + aux[1] + "</a>" + "</li>";
      if (a == 0)
      {
        me.payChar(aux[0]);
      }

    }
    $("#combo_geo").html(_html);   
    
    //lleno los contadores
    var contadores = (respuesta.cont).split("-");

    $("#tlOption").html(contadores[0]);
    $("#vmail").html(contadores[1]);
    $("#Mdieta").html(contadores[2]);
    $("#MDoctor").html(contadores[3]);    
    
  }
  
  /*funcion para el manejo del filtrado de las estadisticas del optin*/
  me.newsletter = function(respuesta)
  {
    var _html = "";
    var country = (respuesta.country).split(","); 
    window.jsonGr = respuesta.tbl;

    for (var a = 0; a < country.length; a++)
    {
      aux = (country[a]).split("-");
      _html += "<li>" + "<a href=\"javascript:tv.payChar('" + aux[0] + "')\">" + aux[1] + "</a>" + "</li>";
      if (a == 0)
      {
        me.payChar2(aux[0]);
      }

    }
    $("#combo_geo").html(_html); 

    var contadores = (respuesta.cont).split(",");
    $("#tlSubs").html(contadores[0]);
    $("#tlbound").html(contadores[1]);
    $("#Tnreg").html(contadores[2]);
    $("#Tlstate").html(contadores[3]);  
  }
  
  
  
  
  
}
//llamo al objeto 
var tv = new univision();



/*inicia funcion para lanzar el datapicker par el rango de fechas*/

function rangeDate()
{
  $('#dashboard-report-range').daterangepicker(
  {
    ranges: {
    },
    opens: 'left',
    format: 'yyyy-MM-dd',
    separator: ' to ',
    startDate: Date.today().add(
    {
      days: -29
    }),
    endDate: Date.today(),
    minDate: '01/01/2000',
    maxDate: '12/31/2050',
    locale: {
      applyLabel: 'Filtrar',
      fromLabel: 'From',
      toLabel: 'To',
      customRangeLabel: 'Custom Range',
      daysOfWeek: ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'],
      monthNames: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],
      firstDay: 1
    },
    showWeekNumbers: true,
    buttonClasses: ['btn-danger']
  },

  function(start, end)
  {

    var inicio = $("input[name='daterangepicker_start']").val();
    var fin = $("input[name='daterangepicker_end']").val();


    $.ajax(
    {
      url: '../administrador/estadisticas/callajax',
      type: 'POST',
      dataType: "json",
      async: false,
      data: {
        "tabla": window.opt,
        "datInicio": inicio,
        "datFinal": fin
      },
      success: function(respuesta)
      {
         $('#dashboard-report-range span').html(start.toString('yyyy MMMM d') + ' - ' + end.toString('yyyy MMMM d'));
        if (respuesta.msg == "0")
        {
          alert("No existen resultados para la consulta . . .");
        }
        else
        {
          //resultados bien
          switch (window.opt)
          {
            // para el dashboard
            case 5:
              window.tv.dashboard(respuesta);
            break;
            // para el optin
            case 6:
              window.tv.optin(respuesta);
            break;
            
            case 7:
              window.tv.newsletter(respuesta);
            break;
          }
        }

      }
    });

  });
} /*fin */



/* permite armar la tabla en la que mostraran los datos*/

function pintarTabla(idContenedor, idTabla, data)
{
  var idContenedor = $("#" + idContenedor);
  var idTabla = $("#" + idTabla);
  var idTabla2 = $("#doc_cv");
  var numCol = data.columnas;
  var auxJson = "";
  var aux = "";

  var head = (data.col_0).split(",");
  var headLong = head.length;
  var htmlHead = "";

  var body;
  var bodyLong;
  var htmlBody = "";
  var arrState = new Array();

/*  
  for(var h = 0 ; h < headLong ; h++)
  {
    htmlHead += "<th style='width:"+tam[h]+"px;'>"+head[h]+"</th>";
  }*/
  for (var c = 1; c < numCol; c++)
  {
    auxJson = eval("data.col_" + c);
    aux = "";
    body = (auxJson).split(",");
    bodyLong = body.length;
    valida = "";

    for (var b = 0; b < bodyLong; b++)
    {
      aux += "<td id='" + c + "_cvs_" + b + "'>" + body[b] + "</td>";
      valida = body[b];
      if (b == 10 && valida.length > 2 && valida != "NULL")
      {
        arrState.push(body[b]);
        //console.log(c+"_cvs_");
      }
    }
    htmlBody += "<tr>" + aux + "</tr>";
  }

  idContenedor.slideDown();
  idTabla2.html(htmlBody);

  //arma de de tabla para mostrar los estados que no es encontraron
  var repetidos = tv.cuentaRepetidos(arrState);
  var idRespuesta = $("#tbl_resumen");
  var idCuerpo = $("#estados");
  var tbl = "";


  if (arrState.length > 0)
  {
    var cont = 0;
    var codigo = "";
    var evento = "";
    tv.combo("1"); //
    window.cmb1 = window.respAjax;

    tv.combo("2"); //
    window.cmb2 = window.respAjax;

    html = tv.comboPais();

    idRespuesta.slideDown();
    for (var i in repetidos)
    {
      evento = "tv.diccionario('autocomplete_" + cont + "');";
      tbl += "<tr id='tautocomplete_" + cont + "'>";
      tbl += "<td>" + repetidos[i] + "</td>";
      tbl += "<td>" + i + "<input type='hidden' value='" + i.toLowerCase() + "' id='2hautocomplete_" + cont + "'></td>";
      tbl += "<td><input type='text' name='currency' id='autocomplete_" + cont + "' style='width:150px;height:15px'></td>";
      tbl += "<td><input type='text' id='hautocomplete_" + cont + "' style='width:150px;height:15px'></td>";
      tbl += "<td><select id='cautocomplete_" + cont + "'  style='width:159px;height:30px'><option value=''></option>" + html + "</select></td>";
      tbl += "<td><a href=\"javascript:" + evento + "\" class='btn green' style='margin-left:31px' ><i class='icon-plus'></i> Add</a></td>";
      tbl += "</tr>";
      codigo += "tv.autoComplete('autocomplete_" + cont + "',window.cmb1);";
      cont++;
    }

    idCuerpo.html(tbl);
    window.tblCont = cont;
    eval(codigo);
  }
  else
  {
    $("#carga_registro").fadeIn();
  }
}

/** permite realizar el envio del csv **/

function ajaxFileUpload(idFile)
{
  var tipo = "";

  if (confirm("Que accion desea realizar : \n\t- Si = Cargar usuarios \n\t- No = Cargar correos no validos "))
  {
    tipo = "0"; //para usuarios
  }
  else
  {
    tipo = "1"; //para correos
  }


  jq13.ajaxFileUpload(
  {
    url: '../administrador/estadisticas/sube',
    type: "POST",
    cache: false,
    secureuri: false,
    fileElementId: idFile,
    async: false,
    dataType: 'json',
    data: {
      namefile: idFile,
      tipo_archivo: tipo
    },
    success: function(data, status)
    {
      switch (data.error)
      {
      case '0':
        if (data.msg)
        {
          alert(data.msg);
        }
        else
        {
          //alert(data.msg);
          pintarTabla("tbl_contenedor", "tblContenedor", data);
        }
        break;
      case '3':
        alert(data.msg);
        break;
      default:
        alert(data.msg);
        break;
      }
    },
    error: function(data, status, e)
    {
      alert(">>>" + e);
    }
  });
}